<!doctype html>
<html itemscope itemtype="http://schema.org/WebPage" lang="zh-cn" class="no-js">
  <head>
    <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="generator" content="Hugo 0.121.1">
<link rel="canonical" type="text/html" href="/docs/contribution-guidelines/contribution/">
<meta name="robots" content="noindex, nofollow">


<link rel="shortcut icon" href="/favicons/favicon.ico" >
<link rel="apple-touch-icon" href="/favicons/apple-touch-icon-180x180.png" sizes="180x180">
<link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
<link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="/favicons/android-36x36.png" sizes="36x36">
<link rel="icon" type="image/png" href="/favicons/android-48x48.png" sizes="48x48">
<link rel="icon" type="image/png" href="/favicons/android-72x72.png" sizes="72x72">
<link rel="icon" type="image/png" href="/favicons/android-96x96.png" sizes="96x96">
<link rel="icon" type="image/png" href="/favicons/android-144x144.png" sizes="144x144">
<link rel="icon" type="image/png" href="/favicons/android-192x192.png" sizes="192x192">

<title>贡献社区 | SOFAServerless</title>
<meta name="description" content="">
<meta property="og:title" content="贡献社区" />
<meta property="og:description" content="" />
<meta property="og:type" content="website" />
<meta property="og:url" content="/docs/contribution-guidelines/contribution/" />

<meta itemprop="name" content="贡献社区">
<meta itemprop="description" content=""><meta name="twitter:card" content="summary"/><meta name="twitter:title" content="贡献社区"/>
<meta name="twitter:description" content=""/>




<link rel="preload" href="/scss/main.min.526354c4efc1a4747972ed64c3be00f7db62aec5f0a3e6ae42052f97e2675d86.css" as="style">
<link href="/scss/main.min.526354c4efc1a4747972ed64c3be00f7db62aec5f0a3e6ae42052f97e2675d86.css" rel="stylesheet" integrity="">

<script
  src="https://code.jquery.com/jquery-3.6.3.min.js"
  integrity="sha512-STof4xm1wgkfm7heWqFJVn58Hm3EtS31XFaagaa8VMReCXAkQnJZ+jEy8PCC/iT18dFy95WcExNHFTqLyp72eQ=="
  crossorigin="anonymous"></script>
<link rel="stylesheet" href="/css/prism.css"/>
<link href="/img/logo.svg" rel="icon" type="image/svg">
<link href="/search/pagefind-ui.css" rel="stylesheet">
<script src="/search/pagefind-ui.js" type="text/javascript"></script>

<script>
    window.addEventListener('DOMContentLoaded', (event) => {
        new PagefindUI({ element: ".td-search" });
    });
</script>


<script>
var doNotTrack = false;
if (!doNotTrack) {
	window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
	ga('create', 'G-DZ8Q3F0GZ7', 'auto');
	
	ga('send', 'pageview');
}
</script>
<script async src='https://www.google-analytics.com/analytics.js'></script>

<script async src="https://www.googletagmanager.com/gtag/js?id=G-DZ8Q3F0GZ7"></script>
<script>
var doNotTrack = false;
if (!doNotTrack) {
	window.dataLayer = window.dataLayer || [];
	function gtag(){dataLayer.push(arguments);}
	gtag('js', new Date());
	gtag('config', 'G-DZ8Q3F0GZ7');
}
</script>
  </head>
  <body class="td-section">
    <header>
      <nav class="td-navbar navbar-dark js-navbar-scroll">
<div class="container-fluid flex-column flex-md-row">
  <a class="navbar-brand" href="/"><span class="navbar-brand__logo navbar-logo"><svg width="26" height="29" viewBox="0 0 26 29" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient x1="52.6662558%" y1="95.7312514%" x2="35.7492678%" y2="11.0078657%" id="linearGradient-wxw43fh1xd-1"><stop stop-color="#9822e4" offset="0"/><stop stop-color="#e643fa" offset="86.0585504%"/><stop stop-color="#f876ff" offset="100%"/></linearGradient><path d="M15.9275871 1.54432572 15.936122 1.5594269 15.9445709 1.57457632 5.01248933 7.79418913 7.699 9.304l8.8412359-4.72420311.8668497-.49490764C17.4171462 4.0791454 17.4272394 4.07345885 17.4373647 4.06782987c1.474137-.81952243 3.3335154-.28885241 4.1530379 1.18528466L10.875 11.088l2.864 1.609 8.843271-5.6213813c1.1038914-.6292563 2.5021428-.23250173 3.1230817.88617614C25.8984381 8.30965565 25.9998668 8.70204694 25.9998668 9.10116416V19.9436637c0 1.3476373-1.002317 2.484932-2.3392704 2.6542897L22.9421516 22.6889619V10.4257286L20.457252 12.0257475 20.457758 23.6880152c0 1.2665471-1.0267393 2.2932864-2.2932864 2.2932864H17.59115L17.590252 13.8727475 15.106 15.473 15.1067564 27.0588825c0 1.0695936-.855616100000001 1.9366704-1.911072 1.9366704C12.8696714 28.9955529 12.5490782 28.9110348 12.2643947 28.7500365L1.63270516 23.3171586C.159863707 22.5645249-.423980046 20.7604209.328653641 19.2875794L.372104915 19.2057013 12.0490412 25.0797183 12.049 22.086 1.98952173 16.7675786C.51279311 15.9867912-.0513787599 14.1567129.729408593 12.6799843L.744416289 12.6519572.759717752 12.6240895 12.049 18.593 12.0490412 15.2566254 1.7391964 9.45898637C1.44132502 9.2850324 1.19527431 9.0328708 1.02697438 8.72907568c-.516688418-.93266477-.189466545-2.11320819.7308705-2.63681754C6.19445786 3.56812633 9.52191759 1.67502747 11.7402241.412961569L11.7628911.400065593c1.4660277-.834070345 3.3306257-.321767634 4.164696 1.144260127z" id="path-wxw43fh1xd-2"/><linearGradient x1="50.6099966%" y1="31.6743333%" x2="50.2419846%" y2="73.0702907%" id="linearGradient-wxw43fh1xd-4"><stop stop-color="#8200b5" offset="0"/><stop stop-color="#8200b5" stop-opacity="0" offset="100%"/></linearGradient><linearGradient x1="50.6028666%" y1="31.6743333%" x2="50.2391561%" y2="73.0702907%" id="linearGradient-wxw43fh1xd-5"><stop stop-color="#8200b5" offset="0"/><stop stop-color="#8200b5" stop-opacity="0" offset="100%"/></linearGradient><linearGradient x1="90.8235257%" y1="50%" x2="3.24041867%" y2="52.9415572%" id="linearGradient-wxw43fh1xd-6"><stop stop-color="#dd3ff7" stop-opacity="0" offset="0"/><stop stop-color="#ca23e4" offset="100%"/></linearGradient><linearGradient x1="74.3272776%" y1="35.8586031%" x2="19.6895996%" y2="19.3309621%" id="linearGradient-wxw43fh1xd-7"><stop stop-color="#b800d1" stop-opacity="0" offset="0"/><stop stop-color="#ae00c5" offset="100%"/></linearGradient><linearGradient x1="97.0070676%" y1="71.8003287%" x2="11.3661868%" y2="30.5044309%" id="linearGradient-wxw43fh1xd-8"><stop stop-color="#940ec7" offset="0"/><stop stop-color="#c435f0" stop-opacity="0" offset="100%"/></linearGradient></defs><g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g id="首页" transform="translate(-24.000000, -18.000000)"><g id="编组-4" transform="translate(24.000133, 16.000000)"><g id="路径-6-copy-2" transform="translate(0.000000, 2.004447)"><mask id="mask-wxw43fh1xd-3" fill="#fff"><use xlink:href="#path-wxw43fh1xd-2"/></mask><use id="Mask" fill="url(#linearGradient-wxw43fh1xd-1)" fill-rule="nonzero" xlink:href="#path-wxw43fh1xd-2"/><path d="M12.0490412 15.2684078 13.03943 15.5167092C14.3279076 16.0478608 15.1686754 17.3038563 15.1686754 18.6975193V18.7421449v9.047164l-3.1196342-1.4070083V15.2684078z" id="Path-114-Copy-2" fill="url(#linearGradient-wxw43fh1xd-4)" opacity=".69047619" mask="url(#mask-wxw43fh1xd-3)"/><path d="M22.9421516 10.4227424 23.8594661 10.2542707C24.8889759 10.219744 25.7876765 10.946368 25.9694916 11.9602841L26.0763097 12.5559692 26.0617858 22.9064645l-3.1196342-1.4070082V10.4227424z" id="Path-114-Copy-2" fill="url(#linearGradient-wxw43fh1xd-5)" opacity=".69047619" mask="url(#mask-wxw43fh1xd-3)"/><polygon id="Path-41" fill="url(#linearGradient-wxw43fh1xd-6)" mask="url(#mask-wxw43fh1xd-3)" points="7.6326499 9.31647968 11.9297751 6.77228295 14.9765833 9.31647968 10.7681311 11.1500753"/><path d="M6.16852974 12.7326226C8.05429918 13.6181711 7.86496926 14.83948 8.18831704 15.006813 8.70089861 15.2720748 9.14143095 17.098905 9.86115602 17.1695013 10.6949216 17.2512836 11.6478081 10.8552079 10.3936906 10.4556578 9.48069361 10.1647855 7.32719679 9.49121213 3.93320016 8.43493769c-.63204609 1.86851711.11306377 3.30107871 2.23532958 4.29768491z" fill="url(#linearGradient-wxw43fh1xd-7)" mask="url(#mask-wxw43fh1xd-3)" transform="translate(7.357416, 12.802608) rotate(-347.000000) translate(-7.357416, -12.802608)"/><polygon id="Path-43" fill="url(#linearGradient-wxw43fh1xd-8)" mask="url(#mask-wxw43fh1xd-3)" points="12.0699788 18.5615749 6.27140769 15.1359473 5.30588708 19.0963147 12.0699788 22.1120507"/></g></g></g></g></svg></span><span class="navbar-brand__name">SOFAServerless</span></a>
  <div class="td-navbar-nav-scroll ms-md-auto" id="main_navbar">
    <ul class="navbar-nav">
      <li class="nav-item">
        <a class="nav-link" href="/home/"><span>首页</span></a>
      </li>
      <li class="nav-item">
        <a class="nav-link active" href="/docs/"><span>产品文档</span></a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="/blog/"><span>最新信息</span></a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="/community/"><span>参与社区</span></a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="/user-cases/"><span>用户案例</span></a>
      </li>
      <li class="nav-item dropdown d-none d-lg-block">
        <div class="dropdown">
  <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">中文</a>
  <ul class="dropdown-menu">
    <li><a class="dropdown-item" href="/no/"></a></li>
    </ul>
</div></li>
      </ul>
  </div>
  <div class="d-none d-lg-block">
    <div class="td-search">
  <div class="td-search__icon"></div>
  <input type="search" class="td-search__input form-control td-search-input" placeholder="站内搜索…" aria-label="站内搜索…" autocomplete="off">
</div>

  </div>
</div>
</nav>
    </header>
    <div class="container-fluid td-outer">
      <div class="td-main">
        <div class="row flex-xl-nowrap">
          <main class="col-12 col-md-9 col-xl-8 ps-md-5" role="main">
            




<div class="td-content">
<div class="pageinfo pageinfo-primary d-print-none">
<p>
这是本节的多页打印视图。
<a href="#" onclick="print();return false;">点击此处打印</a>.
</p><p>
<a href="/docs/contribution-guidelines/contribution/">返回本页常规视图</a>.
</p>
</div>



<h1 class="title">贡献社区</h1>





    <ul>
    
  
  
  
  

  
    
    
	
<li>1: <a href="#pg-2116f3408dfc680cc19d506d77f5894a">本地开发测试</a></li>


    
  
    
    
	
<li>2: <a href="#pg-5726ff7fce2c3ff40a2cd82591c376cc">完成第一次 PR 提交</a></li>


    
  
    
    
	
<li>3: <a href="#pg-6c5458a163d621b3a719a2d5b3973530">文档、Issue、流程贡献</a></li>


    
  
    
    
	
<li>4: <a href="#pg-d890a1e9140aca7ee684208abba11a5f">组织会议和运营布道</a></li>


    
  

    </ul>


<div class="content">
      
</div>
</div>


  
  
  
  

  
  

  
    
    
	
    

<div class="td-content" style="">
    
	<h1 id="pg-2116f3408dfc680cc19d506d77f5894a">1 - 本地开发测试</h1>
    
	<h2 id="sofaark-和-arklet">SOFAArk 和 Arklet</h2>
<p>SOFAArk 是一个普通 Java SDK 项目，使用 Maven 作为依赖管理和构建工具，只需要本地安装 Maven 3.6 及以上版本即可正常开发代码和单元测试，无需其它的环境准备工作。<br />关于代码提交细节请参考：<a href="../first-pr">完成第一次 PR 提交</a>。</p>
<h2 id="modulecontroller">ModuleController</h2>
<p>ModuleController 是一个标准的 K8S Golang Operator 组件，里面包含了 ModuleDeployment Operator、ModuleReplicaSet Operator、Module Operator，在本地可以使用 minikube 做开发测试，具体请参考<a href="/docs/quick-start">本地快速开始</a>。<br />
编译构建请在 module-controller 目录下执行：</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>go mod download   <span style="color:#8f5902;font-style:italic"># if compile module-controller first time</span>
</span></span><span style="display:flex;"><span>go build -a -o manager cmd/main.go  
</span></span></code></pre></div><p>单元测试执行请在 module-controller 目录下执行：</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>make <span style="color:#204a87">test</span>
</span></span></code></pre></div><p>您也可以使用 IDE 进行编译构建、开发调试和单元测试执行。<br />
module-controller 开发方式和标准 K8S Operator 开发方式完全一样，您可以参考 K8S Operator 开发<a href="https://kubernetes.io/zh-cn/docs/concepts/extend-kubernetes/operator/">官方文档</a>。</p>
<h2 id="arkctl">Arkctl</h2>
<p>Arkctl 是一个普通 Golang 项目，他是一个命令行工具集，包含了用户在本地开发和运维模块过程中的常用工具，它和普通 Golang 程序开发完全一样，<em>当前初始版本还在开发中</em>。</p>
<br/>

</div>



    
	
  
    
    
	
    

<div class="td-content" style="page-break-before: always">
    
	<h1 id="pg-5726ff7fce2c3ff40a2cd82591c376cc">2 - 完成第一次 PR 提交</h1>
    
	<h2 id="认领或提交-issue">认领或提交 Issue</h2>
<p>不论您是修复 bug、新增功能或者改进现有功能，在您提交代码之前，请在 <a href="https://github.com/sofastack/sofa-serverless">SOFAServerless</a> 或 <a href="https://github.com/sofastack/sofa-ark">SOFAArk</a> GitHub 上认领一个 Issue 并将 Assignee 指定为自己（新人建议认领 <b>good-first-issue</b> 标签的新手任务）。或者提交一个新的 Issue，描述您要修复的问题或者要增加、改进的功能。这样做的好处是能避免与其他人的<strong>工作重复</strong>。</p>
<h2 id="获取源码">获取源码</h2>
<p>要修改或新增功能，在提 Issue 或者领取现有 Issue 后，点击左上角的<code>fork</code>按钮，复制一份 SOFAServerless 或 SOFAArk 主干代码到您的代码仓库。</p>
<h2 id="拉分支">拉分支</h2>
<p>SOFAServerless 和 SOFAArk 所有修改都在个人分支上进行，修改完后提交 <code>pull request</code>，当前在跑通 PR 流水线之后，会由相应组件的 PMC 或 Maintainer 负责 Review 与合并代码到主干（master）。因此，在 fork 源码后，您需要：</p>
<ul>
<li>下载代码到本地，这一步您可以选择 git/https 方式：</li>
</ul>
<pre tabindex="0"><code>git clone https://github.com/您的账号名/sofa-serverless.git
</code></pre><pre tabindex="0"><code>git clone https://github.com/您的账号名/sofa-ark.git
</code></pre><ul>
<li>拉分支准备修改代码：</li>
</ul>
<pre tabindex="0"><code>git branch add_xxx_feature
</code></pre><p><br />执行完上述命令后，您的代码仓库就切换到相应分支了。执行如下命令可以看到您当前分支：</p>
<pre tabindex="0"><code>  git branch -a
</code></pre><p>如果您想切换回主干，执行下面命令：</p>
<pre tabindex="0"><code>  git checkout -b master
</code></pre><p>如果您想切换回分支，执行下面命令：</p>
<pre tabindex="0"><code>  git checkout -b &#34;branchName&#34;
</code></pre><h2 id="修改代码提交到本地">修改代码提交到本地</h2>
<p>拉完分支后，就可以修改代码了。</p>
<h3 id="修改代码注意事项">修改代码注意事项</h3>
<ul>
<li>代码风格保持一致。SOFAServerless arklet 和 sofa-ark 通过 Maven 插件来保持代码格式一致，在提交代码前，务必先本地执行：</li>
</ul>
<pre tabindex="0"><code>mvn clean compile
</code></pre><p>module-controller 和 arkctl Golang 代码的格式化能力还在建设中。</p>
<ul>
<li>补充单元测试代码。</li>
<li>确保新修改通过所有单元测试。</li>
<li>如果是 bug 修复，应该提供新的单元测试来证明以前的代码存在 bug，而新的代码已经解决了这些 bug。对于 arklet 和 sofa-ark 您可以用如下命令运行所有测试：</li>
</ul>
<pre tabindex="0"><code>mvn clean test
</code></pre><p>对于 module-controller 和 arkctl，您可以用如下命令运行所有测试：</p>
<pre tabindex="0"><code>make test
</code></pre><p>也可以通过 IDE 来辅助运行。</p>
<h3 id="其它注意事项">其它注意事项</h3>
<ul>
<li>请保持您编辑的代码使用原有风格，尤其是空格换行等。</li>
<li>对于无用的注释，请直接删除。注释必须使用英文。</li>
<li>对逻辑和功能不容易被理解的地方添加注释。</li>
<li>务必第一时间更新 docs/content/zh-cn/ 目录中的 “docs”、“contribution-guidelines” 目录中的相关文档。</li>
</ul>
<p>修改完代码后，执行如下命令提交所有修改到本地：</p>
<pre tabindex="0"><code>git commit -am &#39;添加xx功能&#39;
</code></pre><h2 id="提交代码到远程仓库">提交代码到远程仓库</h2>
<p>在代码提交到本地后，就是与远程仓库同步代码了。执行如下命令提交本地修改到 github 上：</p>
<pre tabindex="0"><code>git push origin &#34;branchname&#34;
</code></pre><p>如果前面您是通过 fork 来做的，那么这里的 origin 是 push 到您的代码仓库，而不是 SOFAServerless 的代码仓库。</p>
<h2 id="提交合并代码到主干的请求">提交合并代码到主干的请求</h2>
<p>在的代码提交到 GitHub 后，您就可以发送请求来把您改好的代码合入 SOFAServerless 或 SOFAArk 主干代码了。此时您需要进入您的 GitHub 上的对应仓库，按右上角的 <code>pull request</code>按钮。选择目标分支，一般就是 <code>master</code>，当前需要选择组件的 <a href="../../role-and-promotion#member-list">Maintainer</a> 或 <a href="../../role-and-promotion#member-list">PMC</a> 作为 Code Reviewer，如果 PR 流水线校验和 Code Review 都通过，您的代码就会合入主干成为 SOFAServerless 的一部分。</p>
<h3 id="pr-流水线校验">PR 流水线校验</h3>
<p>PR 流水线校验包括：</p>
<ol>
<li>CLA 签署。第一次提交 PR 必须完成 CLA 协议的签署，如果打不开 CLA 签署页面请尝试使用代理。</li>
<li>自动为每个文件追加 Apache 2.0 License 声明和作者。</li>
<li>执行全部单元测试且必须全部通过。</li>
<li>检测覆盖率是否达到行覆盖 &gt;= 80%，分支覆盖 &gt;= 60%。</li>
<li>检测提交的代码是否存在安全漏洞。</li>
<li>检测提交的代码是否符合基本代码规范。</li>
</ol>
<p>以上校验必须全部通过，PR 流水线才会通过并进入到 Code Review 环节。</p>
<h3 id="code-review">Code Review</h3>
<p>当您选择对应组件的 <a href="../../role-and-promotion#member-list">Maintainer</a> 或 <a href="../../role-member-list#member-list">PMC</a> 作为 Code Reviewer 数天后，仍然没有人对您的提交给予任何回复，可以在 PR 下面留言并 at 相关人员，或者在社区钉钉协作群中（钉钉群号：24970018417）直接 at 相关人员 Review 代码。对于 Code Review 的意见，Code Reviewer 会直接备注到到对应的 PR 或者 Issue 中，如果您觉得建议是合理的，也请您把这些建议更新到您的代码中并重新提交 PR。</p>
<h3 id="合并代码到主干">合并代码到主干</h3>
<p>在 PR 流水线校验和 Code Review 都通过后，就由 SOFAServerless 维护人员操作合入主干了，代码合并之后您会收到合并成功的提示。</p>
<br/>

</div>



    
	
  
    
    
	
    

<div class="td-content" style="page-break-before: always">
    
	<h1 id="pg-6c5458a163d621b3a719a2d5b3973530">3 - 文档、Issue、流程贡献</h1>
    
	<h2 id="文档贡献">文档贡献</h2>
<p>使用文档、技术文档、官网内容需要社区每一位 Contributor 共同维护，对任意文档和官网内容做出贡献的同学都是我们的 Contributor，并且根据活跃度有机会成为 SOFAServerless 组件的 Committer 甚至 PMC 成员，共同主导 SOFAServerless 的技术演进。<br/><br/></p>
<h2 id="issue-提交与回复贡献">Issue 提交与回复贡献</h2>
<p>任何使用过程中的问题、Bug、新功能、改进优化请创建 GitHub Issue，社区每天会有值班同学负责跟进 Issue。任何人提出或者回复 Issue 都是 SOFAServerless 的 Contributor，对回复 Issue 活跃的 Contributor 可以晋升为 Committer，如果特别活跃甚至可以晋升为 PMC 成员，共同主导 SOFAServerless 的技术演进。</p>
<h3 id="issue-模板">Issue 模板</h3>
<p>SOFAServerless（含 SOFAArk）Issue 有两种模板，一种是 “Question or Bug Report”，一种是 “Feature Request”。<br /><img src="https://intranetproxy.alipay.com/skylark/lark/0/2023/png/671/1694089517798-6930c476-c675-44c1-8e76-9f98166f0645.png#clientId=uab052d98-bf90-4&amp;from=paste&amp;height=182&amp;id=u345d4d11&amp;originHeight=364&amp;originWidth=2358&amp;originalType=binary&amp;ratio=2&amp;rotation=0&amp;showTitle=false&amp;size=156188&amp;status=done&amp;style=none&amp;taskId=ufbd6f12c-1e4f-4de5-a74c-a951ddabfac&amp;title=&amp;width=1179" alt="image.png"></p>
<h3 id="question-or-bug-report">Question or Bug Report</h3>
<p>所有使用过程中遇到的问题或者疑似 Bug，请选择 “Question or Bug Report”，并提供详细的复现信息如下：</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span><span style="color:#a40000">###</span> <span style="color:#a40000">Describe</span> <span style="color:#a40000">the</span> <span style="color:#a40000">question</span> <span style="color:#a40000">or</span> <span style="color:#a40000">bug</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a40000">A</span> <span style="color:#a40000">clear</span> <span style="color:#a40000">and</span> <span style="color:#a40000">concise</span> <span style="color:#a40000">description</span> <span style="color:#a40000">of</span> <span style="color:#a40000">what</span> <span style="color:#a40000">the</span> <span style="color:#a40000">question</span> <span style="color:#a40000">or</span> <span style="color:#a40000">bug</span> <span style="color:#a40000">is.</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a40000">###</span> <span style="color:#a40000">Expected</span> <span style="color:#a40000">behavior</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a40000">A</span> <span style="color:#a40000">clear</span> <span style="color:#a40000">and</span> <span style="color:#a40000">concise</span> <span style="color:#a40000">description</span> <span style="color:#a40000">of</span> <span style="color:#a40000">what</span> <span style="color:#a40000">you</span> <span style="color:#a40000">expected</span> <span style="color:#a40000">to</span> <span style="color:#a40000">happen.</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a40000">###</span> <span style="color:#a40000">Actual</span> <span style="color:#a40000">behavior</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a40000">A</span> <span style="color:#a40000">clear</span> <span style="color:#a40000">and</span> <span style="color:#a40000">concise</span> <span style="color:#a40000">description</span> <span style="color:#a40000">of</span> <span style="color:#a40000">what</span> <span style="color:#a40000">actually</span> <span style="color:#a40000">happened.</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a40000">###</span> <span style="color:#a40000">Steps</span> <span style="color:#a40000">to</span> <span style="color:#a40000">reproduce</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a40000">Steps</span> <span style="color:#a40000">to</span> <span style="color:#a40000">reproduce</span> <span style="color:#a40000">the</span> <span style="color:#a40000">problem:</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#0000cf;font-weight:bold">1</span><span style="color:#a40000">.</span> <span style="color:#a40000">Go</span> <span style="color:#a40000">to</span> <span style="color:#a40000">&#39;...&#39;</span>
</span></span><span style="display:flex;"><span><span style="color:#0000cf;font-weight:bold">2</span><span style="color:#a40000">.</span> <span style="color:#a40000">Click</span> <span style="color:#a40000">on</span> <span style="color:#a40000">&#39;....&#39;</span>
</span></span><span style="display:flex;"><span><span style="color:#0000cf;font-weight:bold">3</span><span style="color:#a40000">.</span> <span style="color:#a40000">Scroll</span> <span style="color:#a40000">down</span> <span style="color:#a40000">to</span> <span style="color:#a40000">&#39;....&#39;</span>
</span></span><span style="display:flex;"><span><span style="color:#0000cf;font-weight:bold">4</span><span style="color:#a40000">.</span> <span style="color:#a40000">See</span> <span style="color:#a40000">error</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a40000">###</span> <span style="color:#a40000">Screenshots</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a40000">If</span> <span style="color:#a40000">applicable,</span> <span style="color:#a40000">add</span> <span style="color:#a40000">screenshots</span> <span style="color:#a40000">to</span> <span style="color:#a40000">help</span> <span style="color:#a40000">explain</span> <span style="color:#a40000">your</span> <span style="color:#a40000">problem.</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a40000">###</span> <span style="color:#a40000">Minimal</span> <span style="color:#a40000">yet</span> <span style="color:#a40000">complete</span> <span style="color:#a40000">reproducer</span> <span style="color:#a40000">code</span> <span style="color:#a40000">(or</span> <span style="color:#a40000">GitHub</span> <span style="color:#a40000">URL</span> <span style="color:#a40000">to</span> <span style="color:#a40000">code)</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a40000">###</span> <span style="color:#a40000">Environment</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a40000">-</span> <span style="color:#a40000">SOFAArk</span> <span style="color:#a40000">version:</span>
</span></span><span style="display:flex;"><span><span style="color:#a40000">-</span> <span style="color:#a40000">JVM</span> <span style="color:#a40000">version</span> <span style="color:#a40000">(e.g.</span> <span style="color:#a40000">`java</span> <span style="color:#a40000">-version`):</span>
</span></span><span style="display:flex;"><span><span style="color:#a40000">-</span> <span style="color:#a40000">OS</span> <span style="color:#a40000">version</span> <span style="color:#a40000">(e.g.</span> <span style="color:#a40000">`uname</span> <span style="color:#a40000">-a`):</span>
</span></span><span style="display:flex;"><span><span style="color:#a40000">-</span> <span style="color:#a40000">Maven</span> <span style="color:#a40000">version:</span>
</span></span><span style="display:flex;"><span><span style="color:#a40000">-</span> <span style="color:#a40000">IDE</span> <span style="color:#a40000">version:</span>
</span></span></code></pre></div><h3 id="feature-request">Feature Request</h3>
<p>新功能、已有功能改进优化或者其它讨论，请选择 “Feature Request”。</p>
<h2 id="流程贡献">流程贡献</h2>
<p>SOFAServerless 当前制定了代码规约、PR 流程、CI 流水线、迭代管理、周会、交流渠道等各种协作规范，您可以对我们的协作规范和流程在 GitHub 上提出建议，即可成为我们的 Contributor。</p>
<br/>
<br/>

</div>



    
	
  
    
    
	
    

<div class="td-content" style="page-break-before: always">
    
	<h1 id="pg-d890a1e9140aca7ee684208abba11a5f">4 - 组织会议和运营布道</h1>
    
	<p>我们鼓励大家宣传、布道 SOFAServerless，通过运营成为 SOFAServerless 的 Contributor、Committer 甚至 PMC，每一次 Contributor 的晋升，我们也会发放纪念品奖励。运营方式包括但不限于：</p>
<ol>
<li>在线上或线下技术会议、Meetup 中发表 SOFAServerless 的使用或者技术实现相关演讲。</li>
<li>与其他企业分享交流 SOFAServerless 的使用场景等。</li>
<li>在各种渠道发表关于 SOFAServerless 的使用或者技术实现相关文章或视频。</li>
<li>其它运营方式。</li>
</ol>
<br/>

</div>



    
	
  



          </main>
        </div>
      </div>
      <footer class="td-footer row d-print-none">
  <div class="container-fluid">
    <div class="row mx-md-2">
      <div class="col-6 col-sm-4 text-xs-center order-sm-2">
        
        
        
<ul class="td-footer__links-list">
  
  <li class="td-footer__links-item" data-bs-toggle="tooltip" title="通过社区交流群" aria-label="通过社区交流群">
    <a target="_blank" rel="noopener" href="/docs/contribution-guidelines/communication-channel/" aria-label="通过社区交流群">
      <i class="fab fa-twitter"></i>
    </a>
  </li>
  
</ul>

        
        
      </div>
      <div class="col-6 col-sm-4 text-end text-xs-center order-sm-3">
        
        
        
<ul class="td-footer__links-list">
  
  <li class="td-footer__links-item" data-bs-toggle="tooltip" title="看这里" aria-label="看这里">
    <a target="_blank" rel="noopener" href="/docs/contribution-guidelines/contribution/first-pr/" aria-label="看这里">
      <i class="fab fa-github"></i>
    </a>
  </li>
  
</ul>

        
        
      </div>
      <div class="td-footer__copyright-etc col-12 col-sm-4 text-center py-2 order-sm-2">
        <span>&copy; 2023 SOFAServerless 开源社区 保留所有权利</span>
        
        
      </div>
    </div>
  </div>
</footer>
    </div>
    
  <script src="/js/main.min.1eb4262674b2d02aa8d18559fef13b166dbdfa627fd0a495c66e11577c026aa3.js" integrity="sha256-HrQmJnSy0Cqo0YVZ/vE7Fm29&#43;mJ/0KSVxm4RV3wCaqM=" crossorigin="anonymous"></script>
<script src='/js/prism.js'></script>
<script src='/js/tabpane-persist.js'></script>

  </body>
</html>
